#pragma once
/*--------------------------------------------------------------------------------
 * Adaptive Intelligence - Foundation Framework Class Library
 * Version 2.00
 * 
 * User Data Event Arguments Class
 *      Provides a general use data-related event arguments class for user-
 * or custom-data events.
 *------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------
 * System Imports
 *------------------------------------------------------------------------------*/
#include "stdafx.h"
using namespace System;

namespace Adaptive
{
	namespace Foundation
	{
		/// <summary>
		/// Provides a general use data-related event arguments class for user-
		/// or custom-data events.
		/// </summary>
		/// <remarks>
		/// This class may be used to quickly add custom-data typed events to classes.
		/// </remarks>
		generic<typename T>
		public ref class UserDataEventArgs : public System::EventArgs 
		{
		public:
			/*--------------------------------------------------------------------------------
			 * Constructor / Dispose / Destructor Methods
			 *------------------------------------------------------------------------------*/
			#pragma region Constructor / Dispose / Destructor Methods
			/// <summary>
			/// Initializes a new instance of the class.
			/// </summary>
			UserDataEventArgs();
			/// <summary>
			/// Initializes a new instance of the class to the specified data content.
			/// </summary>
			/// <param name="dataContent">
			/// The data stored in the event arguments class.
			/// </param>
			UserDataEventArgs(T dataContent);
			/// <summary>
			/// Class destructor.
			/// </summary>
			~UserDataEventArgs();
			#pragma endregion
			
			/*--------------------------------------------------------------------------------
			 * Public Properties
			 *------------------------------------------------------------------------------*/
			#pragma region Public Properties
			/// <summary>
			/// Gets or sets the data content.
			/// </summary>
			/// <value>
			/// Data content for the event.
			/// </value>
			property T Data { T get(); void set( T value ); }
			#pragma endregion

		private:
			/*--------------------------------------------------------------------------------
			 * Private Member Declarations
			 *------------------------------------------------------------------------------*/
			#pragma region Private Member Declarations
			/// <summary>
			/// Current data content to be communicated.
			/// </summary>
			T		_data;
			#pragma endregion

		};
	}
}
